Docker CLI for Windowsを使ってみた
はじめに
Docker CLI for Windowsが公開されましたね!(Publickeyさん、いつもお世話になってます!)
- マイクロソフト、開発中のWindows版Dockerクライアントを初披露。オープンソースでビルド可能に - Publickey
- Remote access to Docker with TLS · sheerun
ということで試してみました!環境は以下のような形になります。
やってみた
Docker CLI for Windowsのインストール
Docker CLI for Windowsのインストール手順は大きく4段階になります。
- Golangのインストール
- Git for Windowsのインストール
- Githubリポジトリのclone
- Docker CLIのビルド
Golangのインストール
The Go Programming LanguageのGetting Startedから[MSI file]のリンクをクリックします。
[Downloads]ページが開くので、[go1.3.3.windows-amd64.msi]をダウンロードします。
ダウンロードしたMSIファイルを実行すると、以下のようにSetup Wizardが開始されます。[Next]ボタンをクリックします。
[License Agreement]に同意(Accept)して、[Next]ボタンをクリックします。
フォルダの選択画面が表示されるので、必要に応じて変更(今回はそのままとしました)し、[Next]ボタンをクリックします。
Ready to install画面が表示されるので、[Install]ボタンをクリックすると、インストールが進行します。
インストールが完了したら[Finish]ボタンをクリックします。
PowerShell画面を開いてgoコマンドを実行し動作確認します。
PS C:¥Users¥Administrator> go Go is a tool for managing Go source code. Usage: go command [arguments] (...snip...)
これでGolangのインストールは完了です。
Git for Windowsのインストール
GitのダウンロードページからWindows MSIファイルをダウンロードします。
ダウンロードしたMSIファイルを実行します。Setup Wizard画面が表示されたら[Next]ボタンをクリックします。
[Information]画面が表示されます。そのまま[Next]ボタンをクリックします。
インストール先ディレクトリの選択画面が表示されます。必要に応じて変更し、[Next]ボタンをクリックします。
コンポーネントの選択画面が表示されます。特に変更せず、そのまま[Next]ボタンをクリックします。
メニューフォルダーの選択画面が表示されます。特に変更せず、そのまま[Next]ボタンをクリックします。
PATH環境変数の設定についての画面が表示されます。今回はGit Bashからしか使わないので、そのまま[Next]ボタンをクリックします。
改行コードについての設定画面が表示されます。そのまま[Next]をクリックするとインストールが進行します。
インストールが完了します。必要に応じてReleaseNotesを参照し、[Finish]ボタンをクリックします。
これでGitのインストールは完了です。
Githubリポジトリのclone
Windowsスタート画面にGit bashがありますのでクリックします。
git cloneでGithubにあるDockerリポジトリをcloneします。
Administrator@WIN-0IEA8VL0OFL /c/go/src $ git clone https://github.com/docker/docker.git /c/go/src/github.com/docker/docker Cloning into 'c:/go/src/github.com/docker/docker'... remote: Counting objects: 63302, done. remote: Compressing objects: 100% (82/82), done. remote: Total 63302 (delta 23), reused 54 (delta 12) eceiving objects: 100% (633 Receiving objects: 100% (63302/63302), 35.43 MiB | 5.21 MiB/s, done. Resolving deltas: 100% (41421/41421), done. Checking connectivity... done.
Docker CLIのビルド
ビルドはcmd.exe上から行いますので、PowerShellからcmd.exeを起動します。
PS C:¥Users¥Administrator> cmd.exe Microsoft Windows [Version 6.2.9200] (c) 2012 Microsoft Corporation. All rights reserved. c:¥Users¥Administrator>
ビルドに必要な環境変数を設定します。
c:¥Users¥Administrator>set GOPATH=c:¥go;c:¥go¥src¥github.com¥docker¥docker¥vendor c:¥Users¥Administrator>set DOCKER_CLIENTONLY=1
そしてビルドします。
c:¥Users¥Administrator>cd c:¥go¥src¥github.com¥docker¥docker¥docker c:¥Go¥src¥github.com¥docker¥docker¥docker>go build -v (...snip...) github.com/docker/docker/docker
ビルドが完了したら動作確認します。
c:¥Go¥src¥github.com¥docker¥docker¥docker>docker Usage: docker [OPTIONS] COMMAND [arg...] A self-sufficient runtime for linux containers. (...snip...)
動きましたね!
Dockerサーバのセットアップ
別のEC2にAmazon LinuxをLaunchして、Dockerサーバとします。dockerのインストールはサクっとyumで行います。
$ sudo yum install docker
Dockerに外部サーバから接続可能なように、/etc/sysconfig/dockerを編集して起動オプションを設定します。
$ sudo vi /etc/sysconfig/docker other_args="-H=tcp://0.0.0.0:4243"
そしてDockerを起動します。
$ sudo chkconfig docker on $ sudo service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]
動作確認します。
$ sudo docker -H=tcp://127.0.0.1:4243 ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker CLI for Windowsから接続してみる
WindowsからDocker CLIを使って、 Amazon LinuxのDockerサーバに接続してみます。
c:¥Go¥src¥github.com¥docker¥docker¥docker>set DOCKER_HOST=tcp:/172.31.5.5:4243 c:¥Go¥src¥github.com¥docker¥docker¥docker>docker version Client API version: 1.16 Go version (client): go1.3.3 OS/Arch (client): windows/amd64 ←[31mFATA←[0m[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15)
Oops!
確認したところ、Amazon LinuxのyumでインストールできるDockerのバージョンは1.15でした。
$ sudo docker -H=tcp://127.0.0.1:4243 version Client version: 1.3.1 Client API version: 1.15 Go version (client): go1.3.3 Git commit (client): c78088f/1.3.1 OS/Arch (client): linux/amd64 Server version: 1.3.1 Server API version: 1.15 Go version (server): go1.3.3 Git commit (server): c78088f/1.3.1
Dockerサーバのアップデート
このDocker CLIのClient API versionとDockerサーバのServer API versionを合わせるべく、サーバ側をアップデートすることにします。具体的には最新のソースコードをGithubリポジトリから取得して、バイナリを作成しました。
とりあえず、最新のソースコードを入手するために、gitをインストールします。
$ sudo yum install git
そして最新のソースコードをGithubリポジトリからcloneします。
$ cd $ git clone https://github.com/docker/docker.git Cloning into 'docker'... remote: Counting objects: 63314, done. remote: Compressing objects: 100% (94/94), done. remote: Total 63314 (delta 26), reused 54 (delta 12) Receiving objects: 100% (63314/63314), 35.44 MiB | 4.65 MiB/s, done. Resolving deltas: 100% (41424/41424), done. Checking connectivity... done.
git checkoutしたのち、ビルドします。すると勝手にDockerコンテナが起動し、コンテナの中でガリガリとビルドしてくれます。
$ cd /home/ec2-user/docker/docker $ git checkout -b work $ sudo make build (...snip...) Successfully built 0498e896bb47
そしてDockerのバイナリファイルを作成します。
$ sudo make binary $ ls -alF bundles/1.3.1-dev/binary/ 合計 14224 drwxr-xr-x 2 root root 4096 11月 21 04:50 ./ drwxr-xr-x 3 root root 4096 11月 21 04:49 ../ lrwxrwxrwx 1 root root 16 11月 21 04:50 docker -> docker-1.3.1-dev* -rwxr-xr-x 1 root root 14548274 11月 21 04:50 docker-1.3.1-dev* -rw-r--r-- 1 root root 51 11月 21 04:50 docker-1.3.1-dev.md5 -rw-r--r-- 1 root root 83 11月 21 04:50 docker-1.3.1-dev.sha256
/usr/bin/dockerを入れ替えます。
$ sudo service docker stop Stopping docker: [ OK ] $ sudo mv /usr/bin/docker /usr/bin/docker.old $ sudo cp bundles/1.3.1-dev/binary/docker-1.3.1-dev /usr/bin/docker $ sudo service docker start Starting docker: [ OK ]
そして動作確認とバージョン確認します。
$ sudo docker -H=tcp://127.0.0.1:4243 version Client version: 1.3.1-dev Client API version: 1.16 Go version (client): go1.3.3 Git commit (client): e3f3259 OS/Arch (client): linux/amd64 Server version: 1.3.1-dev Server API version: 1.16 Go version (server): go1.3.3
Docker CLI for Windowsから接続してみる:リトライ
では改めまして、再度WindowsからDocker CLIを使って、 Amazon LinuxのDockerサーバに接続してみます。とりあえずバージョン確認。
c:¥Go¥src¥github.com¥docker¥docker¥docker>docker version Client API version: 1.16 Go version (client): go1.3.3 OS/Arch (client): windows/amd64 Server version: 1.3.1-dev Server API version: 1.16 Go version (server): go1.3.3 Git commit (server): e3f3259
大丈夫そうですね。ではコンテナを起動してみましょう。
c:¥Go¥src¥github.com¥docker¥docker¥docker>docker run centos /bin/echo "Hello, From Windows" Unable to find image 'centos' locally Pulling repository centos ←[1B2d0bdc10: Pulling dependent layers om centos, endpoint: https://registry-1.docker.io/v1/ ←[0B36ea3c5a: Download complete ←[3BStatus: Downloaded newer image for centos:latest Hello, From Windows
起動しました!
Dockerサーバ側で確認すると、もちろん起動した痕跡が残ってます。
$ sudo docker -H=tcp://127.0.0.1:4243 ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 96177826817a centos:centos7 "/bin/echo 'Hello, F 21 seconds ago Exited (0) 21 seconds ago backstabbing_torvalds
ということで、Docker CLI for Windowsが使えました!
さいごに
次期Windows ServerでDockerを採用というニュースがあったり、Amazon EC2 Container Serviceがリリースされたりと、これからもDocker界隈は賑わいそうです。そんな中まずはDocker CLI for Windowsがリリースされたことで、ますます周辺ツールなどが拡充していくのでは無いでしょうか。楽しみですね!